// 
// @Auther: by wujehy
// @Email:wujehy@qq.com
// @Data:2021/1/31.
// @Time:下午3:32.
// 
//

#ifndef IFELSETOMAPTEST_MANAGER_H
#define IFELSETOMAPTEST_MANAGER_H

#include <string>
#include <map>
#include <memory>
#include "base_types.h"
// 声明  类存在 就不用引入 其他头文件 , 减少代码依赖.
class BaseMod;
/**
 * @brief 管理器 , 用于管理 模块的部分 , 注册模块 和 析构 释放等
 */
class Manager
{
protected:
    std::map<std::string , BaseMod*> m_mod_map; ///< 储存 模块的map
public:
    void rount(std::unique_ptr<DataPacket> packet);

    /**
     * @brief 注册模块
     * @param mod 模块的指针
     * @param autoDel 注册失败 是否自动释放 指针
     * @return
     */
    bool regiserMod(BaseMod *mod , bool  autoDel = true);

    /**
     * @brief　移除模块的管理权限
     * @param mod
     */
    void removeModKey(BaseMod *mod);
    Manager();

    virtual ~Manager();
};


#endif //IFELSETOMAPTEST_MANAGER_H
